#ifndef CMM_COMPILER_TABLE_H
#define CMM_COMPILER_TABLE_H

#include <string>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <sstream>
#include <stdexcept>
#include <iostream>
#include <Production.h>
#include <iterator>
#include <vector>
#include <set>
#include <fstream>

#define GRAMMAR_SIZE 98
extern unordered_map<string, vector<string>> production_map; // 存放产生式
extern string start;  // 开始符号
extern map<string, int> predictionTable;
extern Production *productionsArray[GRAMMAR_SIZE]; // 产生式数组

void First();

void Follow();

void initProductions(const char *filename);

void outputVnVt();

string getMapKey(const string &terminal, const string &nonTerminal);

void setPrediction();

#endif //CMM_COMPILER_TABLE_H
